package com.p3c.mysql;

/**
 * 索引规约
 *
 * 1，业务上具有唯一性的字段，即使是多个字段的组合，也必须建成唯一索引
 * 不要以为唯一索引影响了insert速度，这个速度损耗可以忽略，但会明显提高查找速度，另外，即使在应用层做了非常完善的校验控制，
 * 只要没有唯一索引，根据墨菲定律，必然有脏数据产生。
 *
 * 2，超过三个表禁止join，需要join的字段，数据类型必须绝对；当多表关联查询时，保证被关联的字段需要有索引。
 * 即使双表join也要注意表索引 、SQL性能。
 *
 * 3，在varchar字段上建立索引时，必须指定索引长度，没必要对全字段建立 索引 ，根据实际文本区分决定索引长度即可，
 * 使用双表join也要注意表索引 、SQL性能
 * 索引长度与区分长度是一对矛盾体，一般对字符串类型数据，长度为20的索引，区分度会高达90%以上，可以使用
 * count(distinct left(列名,索引长度))/count(*)的区分度来确定
 *
 * 4，页面搜索严禁左模糊或者全模糊，如果需要请通过搜索引擎来解决，
 * 索引文件具有B-Tree的最左前缀匹配特性，如果左边的值未确定，无法使用此索引 。
 *
 * 5，如果有order by的场景，请注意利用索引的有序性。order by最后的字段是组合索引的一部分，并且放在索引组合顺序的最后
 * 避免出现fire_sort的情况，影响查询性能。
 *
 * 6，利用覆盖索引进行查询操作，避免回表
 *
 * 7，利用延迟关联或者子查询优化超多分页场景。
 *
 * 8,SQL性能优化的目录，达到range级别，要求是ref级别，最好是consts.
 * 8.1)consts单表中最多只有一行匹配行，在优化阶段始要读取到数据。
 * 8.2）ref指的是使用普通索引，normal,index
 * 8.3)range对索引进行范围检索
 *
 * 9，建组合索引的时候，区分度最高的在最左边，即把等号条件前置
 *
 * 10，防止因字段类型不同造成的陷式转换，导致索引失效。
 *
 * 11，避免误解：
 * 1，宁滥勿缺，认为一个查询就需要一建一个索引
 * 2，宁缺勿滥，认为索引 会消耗空间，严重拖慢一时半会儿和新增的速度。
 * 3，抑制唯一索引，认为业务 的唯一性一行需要在应用层通过“先查后插”的方式解决。
 *
 *
 *
 * @author liujun
 * @version 0.0.1
 * @date 2018/09/04
 */
public class AlibabaIndex {
}
